package com.song.service.impl;

import com.song.bean.Menu;
import com.song.dao.impl.MiddleDaoImpl;
import com.song.dao.impl.RoleDaoImpl;
import com.song.service.RoleService;

import com.song.bean.Role;

import java.util.ArrayList;
import java.util.List;

public class RoleServiceImpl implements RoleService {
    private RoleDaoImpl roleDao = new RoleDaoImpl();
    private MiddleDaoImpl middleDao = new MiddleDaoImpl();

    /**
     * 查询角色数据
     *
     * @return 角色的集合
     */
    @Override
    public List<Role> getRoles(Integer pageIndex, Integer pagesize) {
        return roleDao.getRoles(pageIndex, pagesize);
    }

    /**
     * 获取信息总数
     *
     * @return 信息集合
     */
    @Override
    public List<Role> getRoles() {
        return roleDao.getRoles();
    }

    /**
     * 新增角色
     *
     * @param roleName  新增角色的名称
     * @param menuList  新增角色的菜单
     * @param roleState 新增角色的状态
     * @return 新增角色对middle数据表的影响行数
     */
    @Override
    public Integer insertRole(String roleName, String[] menuList, int roleState) {
        Integer key = roleDao.insertRole(roleName, menuList, roleState);

        //添加中间表middle的数据
        return middleDao.insertMiddle(key, menuList);
    }

    /**
     * 通过角色（roleid）查询信息
     * 将角色的菜单分级
     *
     * @param roleId 角色ID
     * @return 查询角色role(菜单分级后)
     */
    @Override
    public Role findById(Integer roleId) {
        Role role = roleDao.findById(roleId);
       /* List<Menu> menuList = role.getMenu();
        //存放一级目录的集合
        List<Menu> firstMenus = new ArrayList<>();
        for (Menu menu : menuList) {
            //当该菜单的父菜单ID为0时，表示其为顶级菜单
            if (menu.getFatherMenuId() == 0) {
                //存放二级目录的集合
                List<Menu> secondMenus = new ArrayList<>();
                //当菜单的父菜单ID与该顶级菜单ID值相等时，这个菜单就时其子菜单
                for (Menu menu1 : menuList) {
                    if (menu1.getFatherMenuId() == menu.getMenuId()) {
                        //将二级目录放入二级集合中
                        secondMenus.add(menu1);
                    }
                }
                //设置建立一级与二级目录的关系
                menu.setSecondMenu(secondMenus);
                //将一级目录存到集合
                firstMenus.add(menu);

            }

        }
        role.setMenu(firstMenus);*/
        return role;
    }

    /**
     * 修改角色
     *
     * @param role     角色的对象
     * @param menuList 角色的菜单
     * @return 角色对middle数据表的影响行数
     */
    @Override
    public Integer updateRole(Role role, String[] menuList) {
        int count = 0;
        Boolean aBoolean = roleDao.updateRole(role, menuList);
        if (aBoolean) {
            //修改中间表middle的数据
            count = middleDao.updateMiddle(role.getRoleId(), menuList);

        }
        return count;
    }

    /**
     * 通过角色ID（roleid）找到角色信息
     * 同时将该角色的菜单初始化，以便于修改角色的菜单权限
     *
     * @param roleId 角色ID
     * @return 角色的对象
     */
    @Override
    public Role findById_update(Integer roleId) {
        return roleDao.findById_update(roleId);
    }
    /**
     * 删除角色通过角色ID
     * @param roleid 角色ID
     * @return true 删除成功 false 删除失败
     */
    @Override
    public Boolean deleteRole(Integer roleid) {
        Boolean aBoolean = roleDao.deleteRole(roleid);
        if (aBoolean){
             return middleDao.deleteMiddle(roleid);
        }
        return false;
    }


}
